import moment from "moment";
import { isDataType } from "@/utils/tools";

const SEX_LIST = ["", "男", "女"];

// 验证是否是数字或字符串
function validateToNumber(val) {
  return typeof val === "string" || typeof val === "number";
}

// 验证日期是否合理
function validateDate(val) {
  let date = val;
  // Invalid Date
  if (!date || !date.getTime()) {
    return "";
  }
  let day = moment(date).format("YYYY-MM-DD");
  if (day === "1970-01-01" || day === "1900-01-01") {
    return false;
  }
  return true;
}

// 格式化性别
export function formatSex(sex) {
  return SEX_LIST[sex] || "";
}

// 格式化年龄
export function formatAge(age) {
  if (!age) return "";
  // 纯数字
  if (/^\d+$/.test(age)) return `${age}岁`;
  return age;
}

// 格式化金额
export function formatMoney(money) {
  if (!validateToNumber(money)) {
    return "";
  }
  let num = parseFloat(money);
  if (num === 0) {
    return 0;
  }
  if (!num) {
    return "";
  }
  return (num / 100).toFixed(2);
}

// 格式化金额，带符号
export function formatMoneyWithSymbol(money) {
  if (!validateToNumber(money)) {
    return "";
  }
  let num = parseFloat(money);
  if (num === 0) {
    return "￥0";
  }
  if (!num) {
    return "";
  }
  return "￥" + (num / 100).toFixed(2);
}

// 格式化日期+时间
export function formatDateTime(date) {
  let temp = date;
  if (!isDataType(date, "Date")) {
    temp = new Date(date);
  }
  if (!validateDate(temp)) {
    return "";
  }
  return moment(date).format("YYYY-MM-DD HH:mm:ss");
}

// 格式化日期
export function formatDate(date) {
  let temp = date;
  if (!isDataType(date, "Date")) {
    temp = new Date(date);
  }
  if (!validateDate(temp)) {
    return "";
  }
  return moment(date).format("YYYY-MM-DD");
}

// 格式化日期
export function formatMonth(date) {
  let temp = date;
  if (!isDataType(date, "Date")) {
    temp = new Date(date);
  }
  if (!validateDate(temp)) {
    return "";
  }
  return moment(date).format("YYYY-MM");
}

// 升序排序
export function objKeySort(obj) {
  if (!obj || Array.isArray(obj)) {
    return "";
  }
  // 升序
  let newkey = Object.keys(obj).sort(); // 先用Object内置类的keys方法获取要排序对象的属性名，再利用Array原型上的sort方法对获取的属性名进行排序，newkey是一个数组
  // 倒序
  // var newkey = Object.keys(obj).sort().reverse();
  let newObj = {}; // 创建一个新的对象，用于存放排好序的键值对
  for (let i = 0; i < newkey.length; i++) { // 遍历newkey数组
    newObj[newkey[i]] = obj[newkey[i]]; // 向新创建的对象中按照排好的顺序依次增加键值对
  }
  let objValuesString = "";
  Object.values(newObj).forEach(item => {
    if (!Array.isArray(item) && !(item instanceof Object)) {
      objValuesString = objValuesString + item;
    }
  });
  return objValuesString; // 返回排好序的新对象的值拼接起来的字符窜
}

// 转换当前时间为时间戳
export function dateChange() {
  let date = Date.parse(new Date());
  return date;
}
